/**
 * describe:
 *
 * @author chaP
 * @date 2019/02/26
 */
package CodingTest.AC20190226;
/**
 * 题目描述：给定一种 pattern(模式) 和一个字符串 str ，判断 str 是否遵循相同的模式。

 这里的遵循指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。

 示例1:

 输入: pattern = "abba", str = "dog cat cat dog"
 输出: true
 示例 2:

 输入:pattern = "abba", str = "dog cat cat fish"
 输出: false
 示例 3:

 输入: pattern = "aaaa", str = "dog cat cat dog"
 输出: false
 示例 4:

 输入: pattern = "abba", str = "dog dog dog dog"
 输出: false

 思路：使用hashmap存储，pattern作为key值，str中用split分开成数组，数组中每个元素作为value值，每次map中进入key-value值时，
        进行判断，特别注意一个key对应多个value值的情况，应作出判断，该种情况直接判为false
 */

import java.util.HashMap;
import java.util.Map;

public class wordPattern {
    public boolean wordPattern(String pattern,String str){
        int patternlen = pattern.length();
        String a[] = str.split(" ");
        int alen = a.length;
        Map<Character,String> map = new HashMap<>();
        if(patternlen != alen) return false;
        for(int i = 0;i<patternlen;i++){
            if(map.containsKey(pattern.charAt(i))){
                if(!map.get(pattern.charAt(i)).equals(a[i])) return false;
            }else{
                //注意这里还需加一个判断 因为可能多个key值对应一个value
                if(map.containsValue(a[i])){
                    return false;
                }else{
                map.put(pattern.charAt(i),a[i]);
            }}
        }
        return true;

    }

    public static void main(String[] args) {
        String Pattern = "abba";
        String str = "dog dog dog dog";
        wordPattern wp = new wordPattern();
        System.out.println(wp.wordPattern(Pattern,str));
    }
}
